{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73bd968b-d970-4a05-94ef-4e7abf990827",
   "metadata": {},
   "source": [
    "Chapter 14\n",
    "\n",
    "# 等差数列\n",
    "Book_3《数学要素》 | 鸢尾花书：从加减乘除到机器学习 (第二版)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4a0afd7d-83d6-4d14-a8a8-13ae0e45f558",
   "metadata": {},
   "source": [
    "这段代码的核心是计算和展示等差数列（Arithmetic Progression, AP）的基本特性，包括数列的生成、求和、以及累积和的可视化。\n",
    "\n",
    "首先，代码定义了一个计算等差数列和的函数`sum_AP(a, n, d)`。其中，参数$a$是数列的首项，$n$是项数，$d$是公差。等差数列的和的计算公式为：\n",
    "\n",
    "$$\n",
    "S_n = \\frac{n}{2} \\times (2a + (n - 1)d)\n",
    "$$\n",
    "\n",
    "在这个公式中，$S_n$代表前$n$项的和。函数`sum_AP`使用该公式进行计算并返回结果。\n",
    "\n",
    "接着，代码定义了数列的初始项$a = 1$，项数$n = 100$，和公差$d = 1$，并利用`np.arange`函数生成等差数列序列`AP_sequence`。等差数列的一般项公式为：\n",
    "\n",
    "$$\n",
    "a_k = a + (k - 1)d\n",
    "$$\n",
    "\n",
    "其中$k$是项的编号。根据这一公式，数列中的每一项依次递增公差$d$。序列的索引也由`np.arange`生成，并存储在`index`变量中。\n",
    "\n",
    "然后，代码使用`sum_AP`和`np.sum`分别计算等差数列的和。`sum_AP`函数基于公式，而`np.sum`函数直接求和`AP_sequence`中的所有元素，两者的结果应该一致。\n",
    "\n",
    "接下来，代码通过`matplotlib`绘制了等差数列的图像。坐标轴的标签分别为“Index, k”（表示项的编号）和“Term, $a_k$”（表示项的值）。`plt.stem`用于以棒状图的形式显示每一项的值，方便观察每个位置的数值变化趋势。图表中设置了网格线、坐标轴范围，以及隐藏了右上边框以优化视觉效果。\n",
    "\n",
    "最后，代码计算并绘制了累积和序列`cumsum_AP`，其中每一项为前面所有项的累积和，即：\n",
    "\n",
    "$$\n",
    "S_k = \\sum_{i=1}^{k} a_i\n",
    "$$\n",
    "\n",
    "此公式表示到第$k$项为止的累积和。累积和的可视化图形以相似的形式展示，展示了累积和随序列长度增长的变化趋势。\n",
    "\n",
    "总结来说，这段代码：\n",
    "1. 生成一个等差数列；\n",
    "2. 使用公式和`numpy`分别计算数列的和；\n",
    "3. 可视化数列的单项值和累积和。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f94f294c-af05-4604-9298-bb69ad9e869d",
   "metadata": {},
   "source": [
    "## 导入包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "a58214d1-bfa1-4170-bc08-cefb2a4bc862",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "707a154e-00f3-42e9-9a0d-6a4d799bdd6d",
   "metadata": {},
   "source": [
    "## 计算等差数列和"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "58d2e7d0-f003-4891-91b5-53fae78ae418",
   "metadata": {},
   "outputs": [],
   "source": [
    "def sum_AP(a, n, d):\n",
    "    # 计算等差数列的和，参数a为初始项，n为项数，d为公差\n",
    "    sum_ = (n * (a + a + (n - 1) * d)) / 2  # 使用等差数列求和公式\n",
    "    return sum_"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b403b51b-2109-4919-827f-c50d9b2b3941",
   "metadata": {},
   "source": [
    "## 参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "59fe0bab-469e-441d-ad2b-03461d01b8a7",
   "metadata": {},
   "outputs": [],
   "source": [
    "a = 1    # 初始项\n",
    "n = 100  # 项数\n",
    "d = 1    # 公差"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "faf37882-6775-4209-b064-2bb5966faa43",
   "metadata": {},
   "source": [
    "## 生成等差数列（AP）序列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "aee24a2e-a35a-4d10-8b15-424feafb78af",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AP sequence\n",
      "[  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18\n",
      "  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36\n",
      "  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54\n",
      "  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72\n",
      "  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90\n",
      "  91  92  93  94  95  96  97  98  99 100]\n"
     ]
    }
   ],
   "source": [
    "AP_sequence = np.arange(a, a + n*d, d)  # 生成等差数列\n",
    "index = np.arange(1, n + 1, 1)  # 生成索引序列\n",
    "print(\"AP sequence\")  # 输出等差数列\n",
    "print(AP_sequence)    # 打印等差数列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e4479c68-2900-429d-b5c4-601234db20a6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Sum of AP sequence =  5050.0\n"
     ]
    }
   ],
   "source": [
    "sum_result = sum_AP(a, n, d)  # 调用函数计算等差数列的和\n",
    "sum_result_2 = np.sum(AP_sequence)  # 使用numpy求和方法计算等差数列的和\n",
    "print(\"Sum of AP sequence = \" , sum_result)  # 输出等差数列和"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4821101-f266-4dda-9d5e-e481b56420e4",
   "metadata": {},
   "source": [
    "## 绘制等差数列图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "70a628f6-4500-4c35-ab89-c49d8c744115",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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49XY2Kibb75Zp556ar9JtAY18skeARhG77Sn+f576KGH0vskk0njzjvvNAKBgOF2u43zzjvP2Lt3b/GCRlnJnL7eMMg3FN4vfvELY/bs2Ybb7TZOPvlk44EHHsh6nJxDIXV1dRk33XSTMW3aNMPj8RjTp0837rjjDiMWi6X3IecwGr/5zW/y/u129dVXG4ZhLr8ikYixYsUKo7Gx0fB6vcaFF15ovP/++8OKw2EYhlGQ0hIAAAAAYAo9YgAAAABgMwoxAAAAALAZhRgAAAAA2IxCDAAAAABsRiEGAAAAADajEAMAAAAAm1GIAQAAAIDNKMQAAAAAwGYUYgCAiuNwOPSzn/3M1u/Z3Nys++67z9bvCQAYuyjEAAAl46tf/aq+9KUvFTsMAABGjUIMAAAAAGxGIQYAKFnnn3++brzxRt16661qbGxUIBDQmjVrsvZ5++23dd5558nj8WjWrFnatm1bv+N88MEH+vKXv6wTTjhB48eP10UXXaR3331XkvTHP/5RPp9PW7duTe//05/+VB6PR3v37h1x7A899JAaGhryxgMAKH8UYgCAkrZlyxb5/X7953/+p9avX6+77747Xdwkk0ldfPHFcjqdeumll3T//ffrtttuy3p+OBzWpz/9adXW1uq5557Tzp07VVtbq8997nPq7u7WySefrH/5l3/Rddddp/fee08HDhzQ17/+df3zP/+zTj311BHF/C//8i+6+eab9fTTT2vJkiWjPgcAgNJTXewAAAAYjdNOO0133nmnJGnGjBnatGmTfvWrX2nJkiXavn273njjDb377rv6+Mc/Lklau3atPv/5z6ef/8gjj6iqqko//OEP5XA4JPXerRo3bpyeffZZLV26VNddd52efPJJXXnllaqpqdFZZ52lm266aUTx3n777dqyZYueffbZERdyAIDSRyEGAChpp512WtbXkydPVnt7uyTpjTfe0LRp09JFmCR98pOfzNp/z549euedd1RXV5e1PRqN6k9/+lP66wcffFAzZ85UVVWV9u3bly7ahuO73/2uQqGQXn75ZU2fPn3YzwcAlA+GJgIASprL5cr62uFwKJlMSpIMw+i3f24BlUwmddZZZ+mVV17J+u+tt97S5Zdfnt7vD3/4g0KhkEKhkNra2kYU66c+9SklEgn97//9v0f0fABA+eCOGACgbM2aNUvvv/++Dhw4oClTpkiSXnzxxax9zjzzTD366KOaNGmS6uvr8x7n6NGj+upXv6o77rhDbW1tuuKKK/S73/1OXq93WPHMmzdPN9xwgz772c/K6XTqlltuGdkPBgAoedwRAwCUrcWLF+tv/uZvdNVVV+kPf/iDnn/+ed1xxx1Z+1xxxRWaMGGCLrroIj3//PPav3+/duzYoZtuukl//etfJUl///d/r6lTp+pb3/qWNmzYIMMwdPPNN48opk9+8pP65S9/qbvvvlsbN24c9c8IAChNFGIAgLJVVVWlxx57TLFYTPPmzdPf/d3f6Z577snax+fz6bnnntO0adN08cUX6xOf+IRaW1sViURUX1+vf/u3f9OTTz6pH//4x6qurpbP59O///u/64c//KGefPJJSdKzzz4rh8ORnvJ+KPPnz9cTTzyhb3/72/re975X6B8bAFACHEa+AfQAAMC0hx9+WPfcc49ef/31fj1rAADkwx0xAABG6amnntLatWspwgAApnFHDAAAAABsxh0xAAAAALAZhRgAAAAA2IxCDAAAAABsRiEGAAAAADajEAMAAAAAm1GIAQAAAIDNKMQAAAAAwGYUYgAAAABgMwoxAAAAALDZ/w9ioO9BrLVzyQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(10, 5))  # 创建绘图窗口\n",
    "\n",
    "plt.xlabel(\"Index, k\")  # 设置x轴标签\n",
    "plt.ylabel(\"Term, $a_k$\")  # 设置y轴标签\n",
    "plt.stem(index, AP_sequence)  # 使用stem绘制等差数列\n",
    "ax.grid(linestyle='--', linewidth=0.25, color=[0.5,0.5,0.5])  # 设置网格线样式\n",
    "plt.xlim(index.min(),index.max())  # 设置x轴范围\n",
    "plt.ylim(0,AP_sequence.max() + 1)  # 设置y轴范围\n",
    "plt.gca().spines['right'].set_visible(False)  # 隐藏右边框\n",
    "plt.gca().spines['top'].set_visible(False)  # 隐藏上边框"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
